package paquete;

public class tablero {

	// variables
	private static pieza[][] arraytablero = new pieza[9][9];
	public boolean jaque_mate = false;
	public static pieza bloquen = new pieza('☰', false, pieza.NEGRO);
	public static pieza bloqueb = new pieza('☷', false, pieza.BLANCO);

	// constate
	public static final int BLANCO = 0;
	public static final int NEGRO = 1;

	// constructor que inicializa el tablero
	public tablero() {

		/** guia de tablero **/
		arraytablero[0][0] = new pieza(' ', false, pieza.BLANCO);
		// leyenda 1-8
		for (int i = 1; i <= 8; i++)
			arraytablero[0][i] = new pieza((char) (48 + i), false, pieza.BLANCO);
		// leyenda a-h
		for (int i = 1; i <= 8; i++)
			arraytablero[i][0] = new pieza((char) (96 + i), false, pieza.BLANCO);

		/** casilla vacias - negras y blancas **/
		for (int i = 3; i <= 6; i++)
			for (int j = 1; j <= 8; j++)
				arraytablero[j][i] = parimpar(i, j);

		/** piezas blancas **/
		// peones
		for (int i = 1; i <= 8; i++)
			arraytablero[i][2] = new peon('♙', i, 2, 2, 1, pieza.BLANCO, true);
		// torres
		for (int i = 0; i <= 1; i++)
			arraytablero[1 + (i * 7)][1] = new torre('♖', 1 + (i * 7), 1, 7, 7,
					pieza.BLANCO, true);
		// caballo
		for (int i = 0; i <= 1; i++)
			arraytablero[2 + (i * 5)][1] = new caballo('♘', 2 + (i * 5), 1, 2,
					1, pieza.BLANCO, true);
		// alfil
		for (int i = 0; i <= 1; i++)
			arraytablero[3 + (i * 3)][1] = new alfil('♗', 3 + (i * 3), 1, 7, 7,
					pieza.BLANCO, true);
		// reina
		arraytablero[4][1] = new reina('♕', 4, 1, 7, 7, pieza.BLANCO, true);
		// rey
		arraytablero[5][1] = new rey('♔', 5, 1, 1, 1, pieza.BLANCO, true);

		/** piezas negras **/
		for (int i = 1; i <= 8; i++)
			arraytablero[i][7] = new peon('♟', i, 7, 2, 1, pieza.NEGRO, true);
		// torres
		for (int i = 0; i <= 1; i++)
			arraytablero[1 + (i * 7)][8] = new torre('♜', 1 + (i * 7), 8, 7, 7,
					pieza.NEGRO, true);
		// caballo
		for (int i = 0; i <= 1; i++)
			arraytablero[2 + (i * 5)][8] = new caballo('♞', 2 + (i * 5), 8, 2,
					1, pieza.NEGRO, true);
		// alfil
		for (int i = 0; i <= 1; i++)
			arraytablero[3 + (i * 3)][8] = new alfil('♝', 3 + (i * 3), 8, 7, 7,
					pieza.NEGRO, true);
		// reina
		arraytablero[4][8] = new reina('♛', 4, 8, 7, 7, pieza.NEGRO, true);
		// rey
		arraytablero[5][8] = new rey('♚', 5, 8, 1, 1, pieza.NEGRO, true);

	}

	//metodo que devuelve una casilla negra si la coordenada ij es impar 
	//de lo contrario devuelve una casilla blanca
	public pieza parimpar(int i, int j) {

		if ((mod(i) && mod(j)) || (!mod(i) && !mod(j)))
			return bloquen; // negro
		else
			return bloqueb; // blanco
	}

	//metodo que dibuja el tablero del juego con sus piezas
	public void dibujar() {

		for (int i = 8; i >= 0; i--) {
			for (int j = 0; j <= 8; j++) {
				if ((i == 0 && j == 1) || (i == 0 && j == 4))
					System.out.print(Character.toString(arraytablero[j][i]
							.getcaracter()) + "  ");
				else
					System.out.print(Character.toString(arraytablero[j][i]
							.getcaracter()) + " ");
			}
			System.out.println("");
		}

	}

	public void setPieza(int x, int y, pieza p) {
		tablero.arraytablero[x][y] = p;
	}

	public static boolean mod(int poscicion) {

		return poscicion % 2 == 0;
	}

	public pieza[][] getTablero() {

		return arraytablero;
	}

	public pieza getPieza(int x, int y) {

		return arraytablero[x][y];
	}

	// metodo que hace movimiento de peiza en el tablero
	public void moveTo(int x1, int y1, int x2, int y2) {
		arraytablero[x2][y2] = arraytablero[x1][y1];
		arraytablero[x1][y1] = parimpar(x1, y1);

	}

}
